package com.cskaoyan.javase.oop3.interface2.exercise4;

/**
 * @description: 猫狗案例，加入跳远的额外功能
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 接口：跳远功能
 * 普通类：猫和狗
 * 抽象类：动物类
 *
 * 一个类实现了接口，继承别的类以后 它的数据类型就发生了细微的变化，变成了这个接口/类的子类
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //JumpSkill js = new Cat();
        //js.jump();
        ////做强制类型转换是不安全的，需要用instanceof关键字判断是否可以安全转换
        //if (js instanceof Cat){
        //    ((Cat) js).eat();
        //}
        AbstractAnimal aa = new Cat();
        aa.eat();
        aa.test();
        if (aa instanceof Cat) {
            ((Cat) aa).jump();
        }

    }
}

interface JumpSkill {
    void jump(); //运动
}

abstract class AbstractAnimal {
    int age;
    String name;

    public abstract void eat();

    //具体实现方法
    public void test() {
        System.out.println("test");
    }

    //如果不写构造方法，默认提供无参构造
}

class Cat extends AbstractAnimal implements JumpSkill {

    @Override
    public void jump() {
        System.out.println("猫跳高");
    }

    @Override
    public void eat() {
        System.out.println("猫吃猫粮");
    }

    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}

class Dog extends AbstractAnimal implements JumpSkill {

    @Override
    public void jump() {
        System.out.println("狗调高");
    }

    @Override
    public void eat() {
        System.out.println("狗吃狗粮");
    }

    public void watchDoor() {
        System.out.println("看门狗");
    }
}
